package com.endbd.marketing.dao;


import com.endbd.feignapi.model.marketing.Custom;
import com.endbd.feignapi.model.marketing.Order;
import com.endbd.feignapi.model.marketing.Orderdetails;
import com.endbd.feignapi.model.purchase.CBrand;
import com.endbd.feignapi.model.purchase.CProduct;
import com.endbd.feignapi.model.purchase.CType;
import com.endbd.feignapi.model.system.City;
import com.endbd.feignapi.model.system.Job;
import com.endbd.feignapi.model.system.User;
import com.endbd.marketing.model.MarketingCondition;
import com.endbd.marketing.model.MarketingOrdersCondition;
import com.endbd.marketing.model.MarketingOrdersDetailsCondition;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface IMarketingDao {
        /**
         * 根据条件查询对应的客户集合
         * @param conn
         * @return
         */
        List<Custom> queryMarketingListByCondition(MarketingCondition conn);

        /**
         * 根据条件查询对应的客户详情
         * @param conn
         * @return
         */
        Custom queryMarketingViewByCondition(MarketingCondition conn);

        /**
         * 根据条件查询对应的省、市
         * @param conn
         * @return
         */
        List<City> queryCity(MarketingCondition conn);


        /**
         * 根据条件查询对应的市
         * @param conn
         * @return
         */
        City queryCityByMarketingCondition(MarketingCondition conn);

        /**
         * 根据创建者id查询对应的user
         * @param createId
         * @return
         */
        User queryUserBycreateId(Integer createId);

        /**
         * 根据条件更改客户状态
         * @param conn
         */
        void updateStatus(MarketingCondition conn );

        /**
         * 根据条件查询对应的职位、姓名
         * @param conn
         * @return
         */
        List<User> queryName(MarketingCondition conn);

        /**
         * 根据条件分配客服人员
         * @param conn
         */
        void assignment(MarketingCondition conn);

        /**
         * 根据条件修改客户信息
         * @param custom
         */
        void updateMarketingCustom(Custom custom);

        /**
         * 根据条件增加客户
         * @param custom
         */
        void addMarketingCustom(Custom custom);


        /**
         * 根据条件查询对应的订单集合
         * @param conn
         * @return
         */
        List<Order> queryMarketingOrdersListByCondition(MarketingOrdersCondition conn);

        /**
         * 查询所有的品牌
         */
        List<CBrand> queryBrand();

        /**
         * 根据条件查询对应的商品类型
         * @param brandId
         * @return
         */
        List<CType> queryTypeByBrandId(Integer brandId);

        /**
         * 根据条件查询对应的商品型号
         * @param typeId
         * @return
         */
        List<CProduct> queryProductByTypeId(Integer typeId);

        /**
         * 根据条件查询对应的商品信息
         * @param productId
         * @return
         */
        List<CProduct> queryProductByproductId(Integer productId);

        /**
         * 根据条件查询对应的职位
         * @param deptId
         * @return
         */
        List<Job> queryJobByDeptId(Integer deptId);

        /**
         * 根据条件查询对应的用户名
         * @return
         */
        List<User> queryUserByJobId(Integer jobId);

        /**
         * 根据条件添加订单
         * @param conn
         */
        void addOrder(MarketingOrdersCondition conn);

        /**
         * 根据条件添加订单详情
         * @param orderdetails
         */
       void addOrderDetail(Orderdetails orderdetails);

        /**
         * 根据条件查询订单详情
         * @param conn
         * @return
         */
        List<Orderdetails> queryOrderDetailsByOrderId(MarketingOrdersDetailsCondition conn);

        /**
         * 根据条件删除订单
         * @param orderId
         */
       void delOrder(String orderId);

        /**
         * 根据条件删除订单详情
         * @param orderId
         */
        void delOrderDetail(String orderId);

        /**
         * 根据条件修改相关审核信息
         * @param order
         */
        void orderExamine(Order order);

        /**
         * 根据条件提交审核信息
         * @param order
         */
        void orderAudit(Order order);

        /**
         * 根据条件查询地址
         * @param custom
         */
        Custom queryAddressByCustomId(Custom custom);

        /**
         * 根据条件修改订单客户和金额
         * @param conn
         */
        void updateOrder(MarketingOrdersCondition conn);

        /**
        * 根据条件修改订单仓库以及状态
        * @param conn
        */
        void updateOrderWarehouse(MarketingOrdersCondition conn);

        /**
        * 根据条件为订单增加出库表
        * @param conn
        */
        void addOrderWarehouse(MarketingOrdersCondition conn);




}
